package avicit.cbb.techclass.billdefine.action.service;

import avicit.cbb.techclass.billdefine.domain.CbbTabFormConfig;
import avicit.cbb.techclass.tabledefine.commtablemanager.domain.CbbTabColumns;
import avicit.cbb.techclass.tabledefine.commtempletmanager.domain.CbbTempletCode;
import avicit.platform6.core.dao.Paging;
import avicit.platform6.core.jdbc.Page;

import java.util.List;
import java.util.Map;

/**
 * 参考模版实现类接口 创建时间：2014-08-19
 *
 * @author 朱锋
 *
 */
public interface BillDefineManagerService {

	/**
	 * 获取列代码信息
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @param orgId
	 * @return Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageBillDetailList(Paging<CbbTempletCode> page, Map<String, Object> parameter, String orgId);

	/**
	 * 创建表单信息 参数：系统标识ID，节点ID，节点名称，库表ID
	 * @author 朱锋
	 * @param sysId
	 * @param nodeName
	 * @param orgId
	 * @param deptId
	 * @param tableId
	 * @param nodeId
	 * @param json
	 * @throws Exception void
	 * @throws
	 */
	public void createCbbTabForm(String sysId, String nodeName, String orgId, String deptId, String tableId, String nodeId, String json) throws Exception;

	/**
	 * 创建表单信息 参数：系统标识ID，节点ID，节点名称，库表ID
	 * @author 朱锋
	 * @param sysId
	 * @param nodeName
	 * @param orgId
	 * @param deptId
	 * @param tableId
	 * @param nodeId
	 * @param json
	 * @throws Exception void
	 * @throws
	 */
	public void createCbbTabForm(String sysId, String nodeName, String orgId, String deptId, String tableId, String nodeId, String json,String archiveStatus) throws Exception;

	/**
	 * 更新表单配置表信息
	 * @author 朱锋
	 * @param cbbTabFormConfig void
	 * @throws
	 */
	public void updateCbbTabForm(CbbTabFormConfig cbbTabFormConfig) throws Exception;

	/**
	 * 根据CID 获取FormConfig主键ID
	 * @author 朱锋
	 * @param cid
	 * @return String
	 * @throws
	 */
	public String getCbbTabFormConfigByCid(String cid);

	/**
	 * 根据表单配置ID获取该对象
	 * @author 朱锋
	 * @param id
	 * @return CbbTabFormConfig
	 * @throws
	 */
	public CbbTabFormConfig getcbbTabFormConfigById(String id);

	/**
	 * 获取列信息对象集合
	 * @author 朱锋
	 * @param tableId
	 * @param flag（1-添加显示；2-列表显示；3-详细显示；4-查询显示）
	 * @return List<CbbTabColumns>
	 * @throws
	 */
	public List<CbbTabColumns> getFormShowList(String tableId, String flag);

	/**
	 * 获取列数据源
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @param orgId
	 * @param deptId
	 * @return
	 * @throws Exception Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageCodeDetailList(Paging<CbbTabColumns> page, Map<String, Object> parameter, String orgId, String deptId) throws Exception;

	/**
	 * 通过TABLEID取得列信息表格显示对象集合
	 * @author 朱锋
	 * @param tableId
	 * @param id
	 * @param tableName
	 * @param flag
	 * @param sysId
	 * @param orgId
	 * @param deptId
	 * @return
	 * @throws Exception List<CbbTabColumns>
	 * @throws
	 */
	public List<CbbTabColumns> getFormShowTableList(String tableId, String id, String tableName, String flag, String sysId, String orgId, String deptId) throws Exception;

	/**
	 * 通过TABLEID取得列信息表格显示对象集合(只用于添加页面)
	 * @author 朱锋
	 * @param tableId
	 * @param id
	 * @param tableName
	 * @param flag
	 * @param sysId
	 * @param orgId
	 * @param deptId
	 * @param selectedId  页面选中行数据的ID，用于带值
	 * @return
	 * @throws Exception List<CbbTabColumns>
	 * @throws
	 */
	public List<CbbTabColumns> getFormShowTableListToAdd(String tableId, String id, String tableName, String flag, String sysId, String orgId, String deptId, String selectedId)
			throws Exception;

	/**
	 * 表单数据新增方法
	 *
	 * @param json
	 * @param sysId
	 * @param tableName
	 * @param nodeName
	 * @param nodeId
	 */
	public void insertFormData(String json, String sysId, String tableName, String nodeName, String nodeId, String orgId, String deptId, String loginUserId, String loginIp)
			throws Exception;

	/**
	 * 表单数据更新方法
	 *
	 * @param json
	 * @param sysId
	 * @param tableName
	 * @param nodeName
	 * @param nodeId
	 */
	public void updateFormData(String json, String sysId, String tableName, String nodeName, String nodeId, String id, String orgId, String deptId) throws Exception;

	/**
	 * 表单数据删除方法
	 *
	 * @param dataid
	 * @param tableName
	 */
	public void deleteFormDataById(String dataid, String tableName, String sysId, String orgId, String deptId) throws Exception;

	/**
	 * 根据tabNodeId获取formId
	 *
	 * @author 朱锋
	 *            void
	 * @throws
	 */
	public String getFormIdByTableNodeId(String tableNodeId);

	/**
	 * 根据tabNodeId获取formId
	 *
	 * @author 朱锋
	 *            void
	 * @throws
	 */
	public String getFormIdByTableNodeId(String tableNodeId,String archiveStatus);

	/**
	 * 获取基本字段生成方式为通用代码的字段集合
	 *
	 * @author 朱锋
	 * @param tableId
	 * @param flag
	 * @param sysId
	 * @param orgId
	 * @return Map<String,Map<String,String>>
	 * @throws
	 */
	public Map<String, Map<String, String>> getRuleCodeList(List<CbbTabColumns> list, String flag, String sysId, String orgId);

	/**
	 * 获取部门用户字符串
	 *
	 * @author 朱锋
	 * @param tableId
	 * @param sysId
	 * @param orgId
	 * @return String
	 * @throws
	 */
	public String getUserDpetString(String tableId, String sysId, String orgId) throws Exception;

	/**
	 * 获取表单配置信息中的列信息
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @param orgId
	 * @return
	 * @throws Exception
	 *             Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageBillFormConfigList(Paging<CbbTempletCode> page, Map<String, Object> parameter) throws Exception;

	/**
	 * 获取模版库表单列信息
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @param orgId
	 * @return
	 * @throws Exception
	 *             Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageBillDbList(Paging<CbbTempletCode> page, Map<String, Object> parameter, String orgId) throws Exception;

	/**
	 * 根据表ID,节点ID判断表单是否存在
	 *
	 * @author 朱锋
	 * @param tableId
	 * @param nodeId
	 * @return
	 * @throws Exception
	 *             boolean
	 * @throws
	 */
	public boolean checkHasForm(String tableId, String nodeId,String archiveStatus) throws Exception;
	/**
	 * 根据表ID,节点ID判断表单是否存在
	 *
	 * @author 朱锋
	 * @param tableId
	 * @param nodeId
	 * @return
	 * @throws Exception
	 *             boolean
	 * @throws
	 */
	public boolean checkHasForm(String tableId, String nodeId) throws Exception;

	/***
	 * 根据userId查找userName
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public String getUserNameById(String id) throws Exception;

	/***
	 * 根据deptId查找deptName
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public String getDeptNameById(String id) throws Exception;

	/***
	 * 根据sysCode查找sysName
	 * @param code
	 * @return
	 * @throws Exception
	 */
	public String getSysNameByCode(String code) throws Exception;

	/***
	 * 获取表单管理树节点对应表数据个数
	 * @author 郭亮
	 * @param tableId
	 * @return
	 * @throws Exception int
	 * @throws
	 */
	public int getTableDataCount(String tableId) throws Exception;

	/**
	 * 设置模版列数
	 * @author 郭亮
	 * @param param
	 * 				key1:nodeId,value:string 节点Id
	 * 				key2:tableId,value:string 表Id
	 * 				key3:columnNum,value:string 模版列数
	 * @throws Exception void
	 */
	public void setModelColumn(Map<String, Object> param) throws Exception;

	/**
	 * 获取模板列数
	 * @author 郭亮
	 * @param param
	 * 				key1:nodeId,value:string 节点Id
	 * 				key2:tableId,value:string 表Id
	 * @return
	 * @throws Exception String
	 */
	public String getModelColumn(Map<String, Object> param) throws Exception;

	/**
	 * 根据formId删除表单配置信息
	 * @author 郭亮
	 * @param formId
	 * @throws Exception void
	 */
	public void deleteFormDataByFormId(String formId) throws Exception;

	/**
	 * 根据formId和字段ID判断是否存在表单配置信息
	 * @author 郭亮
	 * @param formId
	 * @param colId
	 * @return Y：有配置，N：无配置
	 * @throws Exception boolean
	 */
	public boolean getformConfigByFormIdAndColId(String formId, String colId) throws Exception;

	public void resetFormDataByFormId(String sysId, String nodeId,  String tableId) throws Exception;
	/**
	 * 表单管理重置
	 * @author 唐坤
	 * @param formId
	 * @throws Exception
	 */
	void resetFormDataByArchiveFormId(String sysId, String nodeId,String tableId,String archiveStatus) throws Exception;
}
